#ifndef USUARIO_H
#define USUARIO_H

#include "Thread.h"
#include "Device.h"
#include "ListaBloqueante.h"
#include "ColaBloqueante.h"
#include "Comunicador.h"
#include <string>

class Usuario: public Thread {
private:
	void enviarNotificaciones(std::string &notif, Device * device);

protected:
	std::string nombre;
	ListaBloqueante<Device*> devices;
	ColaBloqueante<Device*> cola;

public:

	Usuario(std::string n);

	~Usuario();

	// Desconecta al usuario. Espera a que se haya desconectado correctamente antes de retornar.
	void esperarDesconexion();

	// Devuelve el nombre del usuario.
	std::string obtenerNombre();

	virtual bool esIdentificado(){return true;}

	virtual void run();

	// Agrega un nuevo device conectado al cliente.
	void agregarDevice(Comunicador * c, Comunicador * cn);

	std::list<Device*>::iterator desconectarDevice(Device * device);
};

#endif
